6
תגובות
הבנתי שעושים מחלקה מכניסים פונקציות ומפעילים אותם
אבל לא הבנתי למה זה משתמש..

6 תשובות

avatar ענה iiddaannyy ב 11 למאי 2012 #

זה עוזר לך להבין את הקוד בצורה טובה יותר, זה יוצר לך הירארכיה.
זה יוצר לך סדר, ונותן לך אופציה נוחה יותר לניהול הקוד שלך.

לדוגמה, יש לך מחלקה שאחראית על הרשמה לאתר, ופתאום אתה מגלה שיש לך בעיה בהרשמה.
במקום להתחיל לחפש את הבעיה בכל מיני קבצים שקשורים להרשמה, אתה פשוט הולך למחלקה של ההרשמה ומשנה את מה שצריך.
זה נותן לך יותר הגיון בקוד.

avatar ענה משתמש_199033 ב 11 למאי 2012 #

אבל ניסיתי לעשות שגיאה וזה לא אמר לי איזה מחלקה זה.

avatar ענה intval ב 11 למאי 2012 #

אני לא רואה איך זה קשור לשאלה הנוכחית, אבל PHP תמיד אומר באיזה קובץ ובאיזה שורה נמצאת שגיאה.

avatar ענה intval ב 11 למאי 2012 #

באופן כללי OOP זה לא יוצרים מחלקות, אלה זה תפיסת תכנות שונה.
תפיסה שונה לגמרי - זה כמו למישהו שהישתמש עד עכשיו רק בחוש הריאה להעפיל גם את חוש השמיעה.

התפיסה הזאת, בעיקרון, מאפשרת לכתוב קוד שניתן לשימוש בפרוייקטים אחרים. במקום שתצטרך לעשות קופי פייסט של קוד מפרוייקט לפרוייקט - תוכל לקחת תכנה קטה שכבר כתבת, להעתיק אותה ולהישתמש בה (Reusability)

כל זה מתאפשר על ידי הפרדה. כמו שעידן כתב בתשובה לעמלה, האתר שלך מופרד לחלקים בעלי ערך. כל חלק עם ההגדרות והפעולות שלו אחראי לדבר אחד בלבד. משהו אחראי רק על הזדהות, משהו אחראי רק על שליחת אימיילים. למודול שאחראי על אימיילים לא צריך להיות איכפת באיזה אתר הוא נמצא, מי המשתמש שכרגע מחובר וההפרדה היא גמורה. (loose coupling)

אתה מקבל את אופציית הפולימורפיזם, שחוסכת לך הרבה מאוד קוד, תנאים ומסדרת את הקוד בצורה מדהימה.
במקום שיהיו לך שני פעולות "לאכול" ו"ללכת" שבתוכן כל אחת מהן תכיל 10 בדיקות של איזה חיה העברת לפונקציה - אתה מגדיר את הפעולות האלה על החיות עצמן.

<?php

function feedAnimal($animal)
{
  if($animal === 'fish') echo 'throw some warms';
  else if($animal === 'lizard') echo 'throw some flies';
  else if($animal === 'cat') echo 'eat wiskass';
}

//////////////////////////////////////////////////////////////

class Animal {}
class Fish extends Animal
{
  public function feed() { echo 'throw some warms';}
}
class Lizard extends Animal
{
  public function feed() { echo 'throw some throw some flies';}
}
class Cat extends Animal
{
  public function feed() { echo 'eat some wiskass';}
}

function feed(Animal $animal)
{
  return $animal->feed();
}


כמו שאתה רואה מהדוגמה - כל הלוגיקה עוברת להיות "תכונה" של בעל החיים ולא נקבעת על ידי פונקציה חיצונית כלשהי. שזה שוב מחזיר אותך לזה, שאתה יכול לקחת את בעל החיים כפי שהוא ולהעביר לפרוייקט אחר, כיוון שהוא כבר כולל את כל התכנות שלו.
חוץ מזה, אתה לא בקוד לדעת באיזה חיה מדובר ולכתוב תנאים לכל החיות. חשוב לך רק שהמשתנה יהיה מסוג "חיה", שזה אומר שיש לה פעולה "להאכיל" והפעולה הזו תדאג כבר לטפל בכל השאר בלי שאתה תצטרך לעשות משהו.


בנוסף אתה תוכל במועד מאוחר יותר לשנות את מנסה או הפעולות הפנימיות של המחלקה שלך, בלי שהקוד שמשתמש במחלקות האלה - יושפע בכלל. כלומר עריכת קוד נהיית הרבה יותר קלה. עכשיו כשאתה עורך משהו במחלקה לא יפסיק לעבוד פתאום איז עמוד אחר בגלל סיבה לא ברורה לחלוטין. אתה יכול לשנות כמה שאתה רוצה את מבנה הפעולה "להאכיל", ולאף אחד זה לא יפריע. לזה קוראים encapsulation - החבאת המימוש הפנימי.

יכול להיות שלכל החיות יהיו פעולות משותפות. הקוד שלך מקבל צורה אירארכית של אב-בן, כשהבן יודע לעשות כל מה שהאב שלו יודע לעשות. כל אחד מסוגי השחקנים במחשק יודע ללכת במפה, אבל בנסוף, טרולים יודעים להרביץ ומכשפים יודעים לשלוח ברקים. שניהם יורשים את הפעולות והתכונות המשותפות של "שחקן". תגיד שלום להורשה. inheritence

אבל כמו שאתה רואה מכל הסיפור הזה, יש כאן שינוי תפיסה מסוים. פתאום קוד שייך לעצמים. וכבלל הכל מורכב מעצמים. הבן אדם המחובר, השחקנים והמפלצות במפה הם עצמים, גם המפה עצמה היא עצם, הבקשה שהגיעה מהדפדפן זה עצם, פוסט בפורום זה עצם עם תכונות כמו טקסט ומחבר, כשהמחבר זה בכלל עצם נוסף מסוג "משתמש".

צריך לשנות משהו בראש בשביל שזה יעבוד ככה, ובוא נגיד עצלנות היא מכשול ממש גדול בדרך.
מצד שני, היתרונות נמנים למעלה ומקצרים לך את זמני הפיתוח, מקלים על התחזוקה של הקוד ומאפשרים שימוש חוזר בו.

avatar ענה NaseemIB96 ב 11 למאי 2012 #

הייתה פותח עוד מדריך עם כל מה שכתבה פה ^^^

avatar ענה cthulhu ב 11 למאי 2012 #

זה הגדרת אובייקט. זה המושג הכי חשוב כאן - אובייקט. אתה מציג בכך אובייקט מסוים במערכת שלך. לאובייקט יכולות להיות תכונות ויכולות להיות גם פעולות שהאובייקט יכול לעשות. במקום להרכיב את הקוד שלך מפונקציות, של הליכה, ריצה, קפיצה, אכילה וכדומה, ואז לחבר את זה איכשהו עם בן אדם, אתה יכול ליצור אובייקט של בן אדם, לתת לו תכונות, ולהגדיר לו פעולות שהוא יכול לעשות. אתה יכול להסתיר תכונות שונות (לא כ"כ נוח להסביר אינקפסולציה בדוגמא של אדם). אתה יכול להגדיר אובייקט שיורש תכונות. למשל פועל במפעל הוא גם בן אדם, לכן אתה יכול להוריש את התכונות של הבן אדם אבל באותו הזמן לייחד את הפועל במפעל לצרכים שלך - תכונות/פעולות נוספות.